package com.itheima.utils;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/*需求：将jedis的连接池封装到该工具类中，对外提供一个方法，从连接池中获取jedis连接。
 * 分析：
 *    1 在src中新建redis.properties属性文件，编写连接redis的相关参数。
 *    2 在static静态代码块中读取redis.properties属性文件
 *    3 在static静态代码块中初始化jedis连接池对象
 *    4 对外提供一个静态方法，从连接池中获取连接
 *    5 对外提供一个方法，释放资源
 * */
public class JedisUtils {
    private static JedisPool jedisPool;

    static {
        //2.在static静态代码块中读取redis.properties属性文件
        Properties properties = new Properties();
        InputStream is = JedisUtils.class.getClassLoader().getResourceAsStream("redis.properties");
        try {
            properties.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //2..从properties中获取redis所需的数据
        String host = properties.getProperty("redis.host");
        int port = Integer.parseInt(properties.getProperty("redis.port"));
        int timeout = Integer.parseInt(properties.getProperty("redis.timeout"));
        String auth = properties.getProperty("redis.auth");

        //3.在static静态代码块中初始化jedis连接池对象
        //3.1创建连接池配置对象
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        //3.2 创建连接池对象
        //public JedisPool(GenericObjectPoolConfig poolConfig, String host, int port, int timeout, String password)
        jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, auth);
    }

    //4 对外提供一个静态方法，从连接池中获取连接
    public static Jedis getJedis() {
        return jedisPool.getResource();
    }
    //5 对外提供一个方法，释放资源
    public static void close(Jedis jedis){
        jedis.close();
    }

}
